home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 1.iso / dist / fw_exmh.idb / usr / freeware / lib / exmh-2.5 / quote.tcl.z / quote.tcl
Text File  |  2002-07-08  |  3KB  |  154 lines

  1. # Quoting support for exmh.  These functions center around the
  2. # writing of the quote file, which is a pseudo-copy of the message
  3. # being replied to.  The quote file is usually read by the editor,
  4. # sedit or other (I use XEmacs), and processed more completely.
  5. #
  6. # Originally written by Ben Escoto <bescoto@rice.edu>
  7.  
  8. proc Quote_Cleanup {} {
  9.     global quote
  10.     File_Delete $quote(filename)
  11. }
  12.  
  13. proc Quote_MakeFile { folder msg } {
  14.     global mhProfile quote mimeHdr
  15.  
  16.     Exmh_Debug "Quote_MakeFile"
  17.     Quote_Cleanup
  18.  
  19.     if {!$quote(enabled)} {
  20.     return;
  21.     } elseif {[file isdirectory $quote(filename)]} {
  22.     Exmh_Status "quote file is dir"
  23.     return;
  24.     } else {
  25.     if {$quote(symlink)} {
  26.         if [catch {exec ln -s $mhProfile(path)/$folder/$msg $quote(filename)} err] {
  27.         Exmh_Debug "Quote_MakeFile: $err"
  28.         }
  29.     } else {
  30.         set file [open $quote(filename) w 0600]
  31.         Quote_General 0 $file
  32.         close $file
  33.         
  34.     }
  35.     }
  36. }
  37.  
  38. # This function takes a part and decides which function to run on it.
  39. proc Quote_General { part file } {
  40.     global mimeHdr quote
  41.  
  42.     # This first part determines the function to call.
  43.     foreach addType $quote(add) {
  44.     if {[string match $addType $mimeHdr($part,type)]} {
  45.  
  46.         foreach omitType $quote(omit) {
  47.         if {[string match $omitType $mimeHdr($part,type)]} {
  48.             return
  49.         }
  50.         }
  51.  
  52.         set function [option get . quote_$mimeHdr($part,type) {}]
  53.         if {$function == ""} {
  54.         if {[regexp {(.*)/\*} $addType {} begin]} {
  55.             set function \
  56.             [option get . quote_$begin/default {}]
  57.         } elseif {[regexp {\*/(.*)} $addType {} end]} {
  58.             set function \
  59.             [option get . quote_default/$end {}]
  60.         }
  61.  
  62.         if {$function == ""} {
  63.             set function Quote_Default
  64.         }
  65.         }
  66.  
  67.         break
  68.     }
  69.     }
  70.  
  71.     if {[info exist function] && ($function != "")} {
  72.     $function $part $file
  73.     }
  74. }
  75.  
  76. proc Quote_Default { part file } {
  77.     global mimeHdr
  78.  
  79.     if [catch {open $mimeHdr($part,file) r} infile] {
  80.     return
  81.     }
  82.     while {[gets $infile line] >= 0} {
  83.     puts $file $line
  84.     }
  85.     close $infile
  86. }
  87.  
  88. proc Quote_Message { part file } {
  89.     global mimeHdr quote
  90.  
  91.     if {!$mimeHdr($part,numParts)} {
  92.     if {$quote(headers)} {
  93.         Quote_Default $part $file
  94.     } else {
  95.         set infile [open $mimeHdr($part,file) r]
  96.         if {!$quote(headers)} {
  97.         while {([gets $infile line] >= 0) &&
  98.                ([string length $line] != 0)} {
  99.            # skip headers
  100.         }
  101.         }
  102.         while {[gets $infile line] >= 0} {
  103.         puts $file $line
  104.         }
  105.         close $infile
  106.     }
  107.     } else {
  108.     if {$quote(headers)} {
  109.         set infile [open $mimeHdr($part,file) r]
  110.         while {([gets $infile line] >= 0) &&
  111.            ([string length $line] != 0)} {
  112.         puts $file $line
  113.         }
  114.         close $infile
  115.         puts $file ""
  116.     }
  117.     Quote_General $part=1 $file
  118.     }
  119. }
  120.  
  121.  
  122. proc Quote_MultipartDefault { part file } {
  123.     global mimeHdr
  124.  
  125.     for {set i 1} {$i <= $mimeHdr($part,numParts)} {incr i 1} {
  126.     Quote_General $part=$i $file
  127.     puts $file ""
  128.     }
  129. }
  130.     
  131. proc Quote_MultipartSigned { part file } {
  132.     Quote_General $part=1 $file
  133. }
  134.  
  135. proc Quote_MultipartEncrypted { part file } {
  136.     global mimeHdr
  137.  
  138.     if {[info exist mimeHdr($part,pgpdecode)] &&
  139.     $mimeHdr($part,pgpdecode)} {
  140.     Quote_General $part=2=1 $file
  141.     }
  142. }
  143.  
  144. proc Quote_AppPgp { part file } {
  145.     global mimeHdr
  146.  
  147.     if {[info exist mimeHdr($part,numParts)]} {
  148.     Quote_General $part=1 $file
  149.     } elseif {([info exist mimeHdr($part,param,x-action)]) &&
  150.           ($mimeHdr($part,param,x-action) == "signclear")} {
  151.     Quote_Default $part $file
  152.     }
  153. }
  154.